package com.mezz.bones.framework.mybatis.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class PageUtils {

    /**
     * 通用分页数据转换工具
     *
     * @param sourcePage   原始分页数据
     * @param mapper       数据映射函数（转换单条记录）
     * @param <T>          原始数据类型
     * @param <R>          转换后的数据类型
     * @return 转换后的分页对象
     */
    public static <T, R> Page<R> convertPage(IPage<T> sourcePage, Function<T, R> mapper) {
        // 初始化目标分页对象
        Page<R> targetPage = new Page<>();
        targetPage.setCurrent(sourcePage.getCurrent());
        targetPage.setSize(sourcePage.getSize());
        targetPage.setTotal(sourcePage.getTotal());
        targetPage.setPages(sourcePage.getPages());

        // 转换记录数据
        List<R> records = sourcePage.getRecords().stream()
                .map(mapper)
                .collect(Collectors.toList());
        targetPage.setRecords(records);

        return targetPage;
    }
}